■ コンパレータ
![]()
■ 外部リファレンスをつかったコンパレータ
<試作品仕様>
・ 外部リファレンス電圧として、基準電圧2.4Vを
<試作品回路図>(→回路図のPDFファイル)
PIC18F87K90をつかった場合の回路図を以下に示します。
<試作品外観>下記の写真には上記回路図にはない、また本テーマと関係のない部品が多々写っています

<プログラム例>
#include <p18f87K90.h>
#include <stdio.h>
#include <delays.h>
#include <timers.h>
#include <pwm.h>
#include <portb.h>
#pragma config FOSC = XT //FOSC = HS // システムクロック=1MHz
#pragma config XINST = OFF
#pragma config WDTEN = OFF //configではウォッドックタイマOFF //WDTCONレジスタSWDTENビットでスリープ時WDTをOFFに制御
void main (void)
{
TRISJbits.TRISJ0 = 0;
TRISFbits.TRISF5 = 1;
TRISFbits.TRISF2 = 0;
//コンパレータ設定
//Comparator Control 1 Register (CM1CON レジスタ)
CM1CONbits.CON = 0; //1: enable コンパレータイネーブル Comprator Enable nit
CM1CONbits.COE = 0; //1: output enable //コンパレータ1の出力がC1OUT ピンに現れる//
// CM1CONbits.CON = 1; //1: enable コンパレータイネーブル Comprator Enable nit
CM1CONbits.COE = 1; //1: output enable //★★ コンパレータ1の出力がC1OUT ピンに現れる
//0: output disable //★★ コンパレータ1の出力がC1OUT ピンに現れない
CM1CONbits.CPOL = 0; //0: not invert //コンパレータ極性セレクトビット
CM1CONbits.EVPOL0 = 0; //00:コンパレータ出力に伴う割り込み発生なし// Interrupt generation is disable //Interrupt polality select bit
CM1CONbits.EVPOL1 = 0;
CM1CONbits.CREF = 1; //1: Comparetor Reference Select bit //enable //★★ 外部リファレンス電圧を使用
CM1CONbits.CCH1 = 0; //00: Comparator Chanel Select Bit //★★ C1INB pinを使用する旨 設定
CM1CONbits.CCH0 = 0;
//Comparator Voltage Reference Control Register(CVRCON レジスタ)
CVRCONbits.CVREN = 1; //0: コンパレータレファレンス制御レジスタ ON //Comparator Reference Enable bit
CVRCONbits.CVROE = 0; //1: 内蔵Vref OFF //Comparator Vref Output Enable bit//外部リファレンス電圧を使っているので内蔵VREFはOFFでよい
CVRCONbits.CVRSS = 1; //1: コンパレータリファレンスソースCVref = Vref+ - Vref- //Comparator Vref Source Select bit
//★★ 差動でなく外部入力Refを使う時は、Verf-は 0vに接続する必要がある。
//0: PICの電源電圧 CVref = AVdd - AVss
CVRCONbits.CVR4 = 1; //10000: 16 コンパレータのシュレッシュホールドレベル Comparator Vref Value Selection bit
CVRCONbits.CVR3 = 0; //★★ スレッシュホールド電圧の設定: CVref = Vref- + (Vref+ - Vref-) × CVR<4:0>/32
CVRCONbits.CVR2 = 0; // CVref = 2.4v × (0b10000)/32 = 2.4v × 16/32 = 1.2v
CVRCONbits.CVR1 = 0; //
CVRCONbits.CVR0 = 0; //
CM1CONbits.CON = 1; //1: enable コンパレータイネーブル Comprator Enable nit
while (1)
{
if(CMSTATbits.CMP1OUT == 1) //電流が0.1mA以上の場合// 電流有無検出
{
LATJbits.LATJ0 = 0; //コンパレータレベルチェック用LED
}
else
{
LATJbits.LATJ0 = 1; //コンパレータレベルチェック用LED
}
}
}
<実行結果>
スレッシュホールド電圧 12vを 境にON/OFFした結果を以下に示す。
尚、Vref- を0Vに接続しないと スレッシュホールド電圧は リファレンス電圧となる。
| コンパレータ リファレンス電圧測定 (Vref+(27pin)電圧) |
![]() |
|
・C1OUT(18pin) ・RJ0(62pin) |
LED OFF コンパレータ入力電圧 =13.05v (C1INB(15pin)電圧) |
![]() |
| LED ON コンパレータ入力電圧 = 11.07v (C1INB(15pin)電圧) |
![]() |
|